A distributed application is software that executes on two or more computers in a network, wherein such computers can communicate with one another by way of the network. Generally, in a client-server environment, a distributed application has two portions: 1) a “front end” that executes on a client computing device(s); and 2) a “back end” that executes on other computing devices, such as a server computing device(s). An instance of the distributed application executing on a client computing device is referred to herein as a “client,” while an instance of the distributed application executing on a server computing device is referred to herein as a “server.” The distributed application can use an application programming interface (API) to provide a common interface for communications between different executing instances, and can be used to provide services, features, and information in a way that can be understood by application developers and used by different executing instances of the application.
Executing a client for a distributed application on a mobile device can present several challenges. Different mobile devices attempting to communicate with one another may use different communications protocols, and a mobile device may switch between protocols (e.g., from using a cellular communications network to using a Wi-Fi connection) when communicating with another device. Additionally, a mobile device may execute a client as a background operation, thus limiting the ability of the client to receive real-time communications. Other challenges associated with executing a client of a distributed application include cross-domain scripting, overly chatty communications, differences in devices or browsers that execute the client, etc. Such challenges can affect the resiliency of a distributed application, and limit the degree to which the distributed application can be scaled.
Further, memory and processing resources at a server are reserved to ensure that clients of the distributed application are functioning properly. When, for example, the distributed application is a real-time communications application, a server may desirably communicate with several clients at once (e.g., transmit an incoming message to a telephone, tablet, desktop, etc.), which can increase the memory and processing usage of the server. Furthermore, an interruption of a server (e.g., a server computing device undergoing scheduled maintenance) may negatively impact clients being served by such server (e.g., can cause clients to experience loss of functionality).